package com.lry.basic.netty.protocol.codec;

import org.jboss.marshalling.*;

import java.io.IOException;

public final class MarshallingCodeCFactory {

    /**
     * 创建Jboss Marshaller编码对象
     * @return Marshaller
     * @throws IOException 
     */
    public static Marshaller buildMarshalling() throws IOException {
    	//首先通过Marshalling工具类的精通方法获取Marshalling实例对象 参数serial标识创建的是java序列化工厂对象。
		final MarshallerFactory marshallerFactory = Marshalling.getProvidedMarshallerFactory("serial");
		//创建了MarshallingConfiguration对象，配置了版本号为5 
		final MarshallingConfiguration configuration = new MarshallingConfiguration();
		configuration.setVersion(5);
		Marshaller marshaller = marshallerFactory.createMarshaller(configuration);
		return marshaller;
    }

    /**
     * 创建Jboss Unmarshaller解码对象
     * @return Unmarshaller
     * @throws IOException 
     */
    public static Unmarshaller buildUnMarshalling() throws IOException {
		final MarshallerFactory marshallerFactory = Marshalling.getProvidedMarshallerFactory("serial");
		final MarshallingConfiguration configuration = new MarshallingConfiguration();
		configuration.setVersion(5);
		Unmarshaller unmarshaller = marshallerFactory.createUnmarshaller(configuration);
		return unmarshaller;
    }
//
//	/**
//	 * 创建Jboss Marshalling解码器MarshallingDecoder
//	 * @return MarshallingDecoder
//	 */
//	public static MarshallingDecoder buildMarshallingDecoder() {
//		//首先通过Marshalling工具类的精通方法获取Marshalling实例对象 参数serial标识创建的是java序列化工厂对象。
//		final MarshallerFactory marshallerFactory = Marshalling.getProvidedMarshallerFactory("serial");
//		//创建了MarshallingConfiguration对象，配置了版本号为5
//		final MarshallingConfiguration configuration = new MarshallingConfiguration();
//		configuration.setVersion(5);
//		//根据marshallerFactory和configuration创建provider
//		UnmarshallerProvider provider = new DefaultUnmarshallerProvider(marshallerFactory, configuration);
//		//构建Netty的MarshallingDecoder对象，俩个参数分别为provider和单个消息序列化后的最大长度
//		MarshallingDecoder decoder = new MarshallingDecoder(provider, 1024 * 1024 * 1);
//		return decoder;
//	}
//
//	/**
//	 * 创建Jboss Marshalling编码器MarshallingEncoder
//	 * @return MarshallingEncoder
//	 */
//	public static MarshallingEncoder buildMarshallingEncoder() throws IOException {
//		final MarshallerFactory marshallerFactory = Marshalling.getProvidedMarshallerFactory("serial");
//		final MarshallingConfiguration configuration = new MarshallingConfiguration();
//		configuration.setVersion(5);
//		MarshallerProvider provider = new DefaultMarshallerProvider(marshallerFactory, configuration);
//		//构建Netty的MarshallingEncoder对象，MarshallingEncoder用于实现序列化接口的POJO对象序列化为二进制数组
//		MarshallingEncoder encoder = new MarshallingEncoder(provider);
//		return encoder;
//	}
}